Tableau Desktopで計算フィールド+ユーザー関数を使用して、見る人によって違うデータが動的に表示されるようにする #tableau
はじめに
こんにちは。大阪オフィス唯一のDI部メンバー、tamaです。
今回も、Tableauのユーザーフィルターという機能についてご紹介します。前回のエントリでは、フィルターしたいデータとユーザーを、手動で設定する方法をご紹介しましたが、今回は自動でユーザーフィルターが適用される方法をご紹介します。
前回エントリはこちら
自動のユーザーフィルターとは
最初に書いた通り、今回は自動でユーザーフィルターが適用される設定について見てきます。「自動で設定する」と言うと、何だかすごい機能のようにも聞こえますが、実態としては、そんな大掛かりな方法ではありません。ユーザー関数を用いた計算フィールドを作成し、それをフィルターに適用すれば、実現できます。
ユーザー関数とは
「そのビューを閲覧しているユーザー(またはユーザーが属しているグループ)」を呼び出したり、比較したりすることができる関数です。詳細は下記のリンクを見ていただければと思いますが、Tableau Server上で閲覧しているユーザーに関する関数なので、Tableau Serverにパブリッシュするワークブック前提の関数ですね。
これを利用することで、自動的にユーザーをチェックし、表示データを制御することができます。
ちょっとやってみる
実際に試してみましょう。
- Tableau Server 10.5
- Tableau Desktop 2018.1
テストユーザーを作成
ちょっと無茶ですが、下記の通り、「奈良」と「京都」というユーザーを作成します。(ユーザーフィルターを使用を検証したいため、用意するユーザーについてはちょっとズボラな形でやります…。)
Tableau Desktop上でTableau Serverにサインイン
右下にユーザー名が表示されていれば、正しくサインインできています。(このワークブックは、Tableauに最初から入っている「日本分析」というものです。)
計算フィールドを作成する
先程も説明した通り、ユーザー関数を用いた計算フィールドを作成します。作成する計算式は以下の通りです。
これは、「ユーザー名が『都道府県』の値と同じかどうか?」という計算式になります。返り値は真偽値です。
計算フィールドをフィルターに配置する
上記で作成した計算フィールドを、フィルターシェルフに配置します。そしてフィルターを通す値を「真」のみにします。
こうすることで、「ユーザー名と同じ値の『都道府県』のデータだけフィルタを通過させる」という設定ができました。
確認
Tableau Desktopのユーザー別プレビュー機能を使用して確認します。まずは「奈良」というユーザーで確認します。
ユーザー名が「奈良」なので、「奈良」という値の都道府県のデータだけ表示されています。要するに奈良県のデータだけが表示されるようになっているということですね。
続いて「京都」というユーザーではどうでしょうか。
こちらも、先程の「奈良」と同じ原理ですね。ではそれ以外のユーザーはどうでしょうか。
「越中詩郎」という値は、このワークブックに使用されているデータの「都道府県」には存在しないため、該当するデータも無い…つまり何も表示されないということになります。
使い方は色々
上記の検証では、非常に単純な計算式を使っています。Tableauユーザーの方はお分かりかと思いますが、計算フィールドは結構自由に色々な式を記述することができます。また、ユーザー関数も、他にも種類があります。つまり、組み合わせ次第では、もっと柔軟なデータ表示の制御が可能だということです。みなさんもちょっと試してみてはいかがでしょうか。(ユーザーではなく、グループで制御するのもアリかと思います。)
データソースの時点でフィルタしてしまう
今まで紹介したユーザーフィルターは、「ワークシート上」で行ってきました。これだけを見ると、「ワークシートが複数あったら、全てにチマチマ設定しないといけないのか?」とうんざりするかもしれません。
実は、ユーザーフィルターは「データソース」自体に仕掛けることも可能です。やり方は簡単です、下記の画像を見れば、すぐにピンと来るかと思います。
データソースの画面で、「フィルタを追加」を選び、作成した手動ユーザーフィルターや自動ユーザーフィルターを指定すれば、その条件でデータソース自体を絞ることができます。データソース自体を絞っているので、このデータソースを使用するワークシートには、全てユーザーフィルターが効く…ということです。
ユーザーフィルターのデメリット
ワークブックは1つ、使用するデータも1つ、でも表示するデータはユーザー別に分けることができる…ユーザーフィルターは非常に便利です。しかし、個人的には、何でもかんでもユーザーフィルターで制御するのではなく、バランスを考えて使用するのがいいと思っています。
ここで、あえてユーザーフィルターのデメリットを挙げてみたいと思います。
(手動)メンテナンスが大変
手動ユーザーフィルターの場合、ユーザーやグループを手で指定するため、ユーザーやグループが変動(増えたり減ったり変わったり)した場合、ワークブック自体に手を加える必要があります。組織によってはユーザー数の変動は、決して少なくないため、その度にワークブックのフィルタを修正するのは、あまり良い運用ではないですよね。
(自動)データの値とユーザーが紐づいている必要がある
では、当エントリで書いている計算フィールド+ユーザー関数の方法はどうでしょうか。「ユーザー名」や「グループ名」を計算式上で定義しているため、ユーザーが増えたからと言って、いちいちメンテナンスする必要はありません。
ただ、問題なのは、これは計算フィールドである以上、「データとユーザー名が紐付いている必要がある」ということです。この方法は、どのような形でも、必ずデータの値とユーザー名を比較することになります。つまり、データの方に、ユーザー名やグループ名が入っていないと、この方法自体を実行できないということになります。
パフォーマンスの懸念
これは、そこまで重大な影響は無いとは思いますが、ユーザーフィルターは特殊とはいえ、フィルターはフィルターなので、複雑なものを設定している場合、パフォーマンスが遅くなる可能性があります。ここはパフォーマンスとユーザーフィルターの利便性を天秤にかけることになります。
おわりに
デメリットを挙げては見ましたが、ユーザーフィルターが便利なのは間違いないので、自社の要件に沿って、ユーザーフィルターを使用するのか、ワークブック自体を分けて適切な権限設定を行って対応するのか、選んでいただければと思います。